package cn.yh.springbootjwt.utils;

import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.TimeZone;

public class TimeUtils {

    // 将ISO 8601格式的UTC时间转换为中国时区的时间，并格式化为字符串（包含年月日时分秒毫秒）
    public static String convertUtcToChinaTime(String utcDateStr) {
        // 将ISO 8601格式的UTC时间字符串转换为Instant对象
        Instant instant = Instant.parse(utcDateStr);

        // 将Instant转换为中国时区的时间
        ZonedDateTime chinaTime = instant.atZone(ZoneId.of("Asia/Shanghai"));

        // 格式化为字符串（包含毫秒）
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
        return chinaTime.format(formatter);
    }

    // 获取中国时区的当前时间，并转换为Date类型
    public static Date getChinaTimeAsDate() {
        // 获取中国时区的当前时间
        ZonedDateTime chinaTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));

        // 转换为Date类型
        return Date.from(chinaTime.toInstant());
    }

    // 将Date转换为格式化的字符串（包含年月日时分秒毫秒）
    public static String formatDateToChinaTime(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        return sdf.format(date);
    }

    // 将Date转换为中国时区的毫秒时间戳
    public static long convertDateToChinaTimestamp(Date date) {
        return date.getTime();
    }

    // 示例：输出当前时间的详细信息（格式化时间、时间戳等）
    public static void printCurrentTimeDetails() {
        Date currentDate = getChinaTimeAsDate();
        String formattedTime = formatDateToChinaTime(currentDate);
        long timestamp = convertDateToChinaTimestamp(currentDate);

        System.out.println("Formatted China Time: " + formattedTime);
        System.out.println("Timestamp (milliseconds): " + timestamp);
    }

    public static void main(String[] args) {
        // 示例：将收到的UTC时间转换为中国时区的时间
        String utcTime = "2025-05-07T14:01:21.000Z"; // 传入的UTC时间
        String chinaTime = convertUtcToChinaTime(utcTime);
        System.out.println("Converted China Time: " + chinaTime); // 输出：2025-05-07 22:01:21.000
    }
}
